home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue72 / dynimag / DrBob.dpr next >
Encoding:
Text File  |  2001-07-03  |  5.5 KB  |  201 lines

  1. program DrBob;
  2. {$APPTYPE CONSOLE}
  3. uses
  4.   DrBobCGI, Classes, SysUtils, DB, DBClient
  5.   {$IFDEF ISSUE71}
  6.     , SqlExpr
  7.   {$ENDIF};
  8.  
  9.   procedure DataSet2HTML(const DataSet: TDataSet);
  10.   var
  11.     fields: Integer;
  12.     RecNo: Integer;
  13.   begin
  14.     writeln('<table border=1>');
  15.     DataSet.Open;
  16.     write('<tr>');
  17.     for fields:=0 to Pred(DataSet.FieldCount) do
  18.       write('<td bgcolor=ffffff><b>',DataSet.Fields[fields].FieldName,'</td>');
  19.     writeln('</tr>');
  20.     DataSet.First;
  21.     RecNo := 0;
  22.     while not DataSet.Eof do
  23.     begin
  24.       Inc(RecNo);
  25.       write('<tr>');
  26.       for fields:=0 to Pred(DataSet.FieldCount) do
  27.         if DataSet.Fields[fields] IS TGraphicField then { GRAPHICS }
  28.           writeln('<td><img src="',ScriptName,'?IMG=yes&RecNo=',RecNo,
  29.             '&FieldName=',DataSet.Fields[fields].FieldName,'"></td>')
  30.         else
  31.           write('<td>',DataSet.Fields[fields].AsString,'</td>');
  32.       writeln('</tr>');
  33.       DataSet.Next
  34.     end;
  35.     writeln('</table>')
  36.   end {DataSet2HTML};
  37.  
  38.   procedure Record2HTML(const DataSet: TDataSet; RecNo: Integer);
  39.   var
  40.     fields: Integer;
  41.   begin
  42.     if not DataSet.Active then DataSet.Open;
  43.     for fields:=0 to Pred(DataSet.FieldCount) do
  44.       if DataSet.Fields[fields] IS TGraphicField then { GRAPHICS }
  45.         writeln('<b>',DataSet.Fields[fields].FieldName,':</b> ',
  46.           '<img src="',ScriptName,'?IMG=yes&RecNo=',RecNo,'&FieldName=',
  47.             DataSet.Fields[fields].FieldName,'"><br>')
  48.       else
  49.         writeln('<b>',DataSet.Fields[fields].FieldName,':</b> ',
  50.           DataSet.Fields[fields].AsString,'<br>')
  51.   end {Record2HTML};
  52.  
  53.   procedure NavigatorHTML(const DataSet: TDataSet; RecNo: Integer);
  54.   begin
  55.     if RecNo = 0 then RecNo := 1;
  56.     if not DataSet.Active then DataSet.Open;
  57.     write('<a href="',ScriptName,'?RecNo=1">First</a> | ');
  58.     write('<a href="',ScriptName,'?RecNo=',Pred(RecNo),'">Prior</a> | ');
  59.     write('<a href="',ScriptName,'?RecNo=',Succ(RecNo),'">Next</a> | ');
  60.     write('<a href="',ScriptName,'?RecNo=-1">Last</a> | ');
  61.     write('<a href="',ScriptName,'?RecNo=',RecNo,'">Refresh</a> ',
  62.           '(',RecNo,')<br>')
  63.   end {NavigatorHTML};
  64.   
  65.   procedure DataSetRecNo(DataSet: TDataSet; var RecNo: Integer);
  66.   var
  67.     i: Integer;
  68.   begin
  69.     DataSet.Open;
  70.     if RecNo = -1 then
  71.     begin
  72.       RecNo := 1;
  73.       while not DataSet.Eof do
  74.       begin
  75.         Inc(RecNo);
  76.         DataSet.Next
  77.       end
  78.     end
  79.     else
  80.       for i:=1 to Pred(RecNo) do DataSet.Next;
  81.     if DataSet.Eof then // went past Eof, need to backtrack!
  82.     begin
  83.       Dec(RecNo); // one before Eof
  84.       DataSet.First;
  85.       for i:=1 to Pred(RecNo) do DataSet.Next
  86.     end
  87.   end {DataSetRecNo};
  88.  
  89. {$IFDEF ISSUE71}
  90.   procedure DBQuery2HTML(const DB, Query: String; RecNo: Integer);
  91.   var
  92.     SQLConnection1: TSQLConnection;
  93.     DataSet: TSQLDataSet;
  94.   begin
  95.     SQLConnection1 := TSQLConnection.Create(nil);
  96.     with SQLConnection1 do
  97.     begin
  98.       LoadParamsOnConnect := True;
  99.       ConnectionName := DB;
  100.       LoginPrompt := False;
  101.       Connected := True;
  102.     end;
  103.     DataSet := TSQLDataSet.Create(nil);
  104.     try
  105.       DataSet.SQLConnection := SQLConnection1;
  106.       DataSet.CommandText := Query;
  107.       DataSetRecNo(DataSet, RecNo);
  108.       NavigatorHTML(DataSet,RecNo);
  109.       writeln('<hr>');
  110.       Record2HTML(DataSet,RecNo);
  111.       writeln('<hr>');
  112.       NavigatorHTML(DataSet,RecNo);
  113.       writeln('<hr>');
  114.       DataSet2HTML(DataSet);
  115.     finally
  116.       DataSet.Close;
  117.       DataSet.Free;
  118.       SQLConnection1.Free
  119.     end
  120.   end {DBQuery2HTML};
  121. {$ENDIF}
  122.  
  123.   procedure Table2HTML(const TableName: String; RecNo: Integer);
  124.   var
  125.     DataSet: TClientDataSet;
  126.   begin
  127.     DataSet := TClientDataSet.Create(nil);
  128.     try
  129.       DataSet.FileName := TableName;
  130.       DataSet.Open;
  131.       DataSetRecNo(DataSet, RecNo);
  132.       NavigatorHTML(DataSet,RecNo);
  133.       writeln('<hr>');
  134.       Record2HTML(DataSet,RecNo);
  135.       writeln('<hr>');
  136.       NavigatorHTML(DataSet,RecNo);
  137.       writeln('<hr>');
  138.       DataSet2HTML(DataSet);
  139.     finally
  140.       DataSet.Close;
  141.       DataSet.Free;
  142.     end
  143.   end {Table2HTML};
  144.   
  145.   procedure Table2Img(const TableName, FieldName: String; RecNo: Integer);
  146.   var
  147.     DataSet: TClientDataSet;
  148.     Str: String;
  149.     i: Integer;
  150.   begin
  151.     DataSet := TClientDataSet.Create(nil);
  152.     try
  153.       DataSet.FileName := TableName;
  154.       DataSetRecNo(DataSet, RecNo);
  155.       Str := (DataSet.FieldByName(FieldName) AS TGraphicField).AsString;
  156.       for i:=9 to Length(Str) do write(Str[i]);
  157.     finally
  158.       DataSet.Close;
  159.       DataSet.Free;
  160.     end
  161.   end {Table2Img};
  162.  
  163. const
  164.   Biolife = 'biolife.cds';
  165. var
  166.   RecNo: Integer;  
  167.   Dir: String;
  168. begin
  169.   RecNo := StrToIntDef(Value('RecNo'),1);
  170.   if Value('IMG') = 'yes' then
  171.   begin
  172.     writeln('content-type: image/bmp');
  173.     writeln;
  174.     Table2Img(Biolife,Value('FieldName'), RecNo)
  175.   end
  176.   else
  177.   try
  178.     writeln('content-type: text/html');
  179.     writeln;
  180.     writeln('<html>');
  181.     writeln('<body bgcolor=ffffcc>');
  182.     writeln(ScriptName,' = ',ParamStr(0),'<br>');
  183.     GetDir(0,Dir);
  184.     writeln('Working Directory: ',Dir,'<br>');
  185.     writeln(RemoteAddress,'<hr>');
  186.     try
  187.     {$IFDEF ISSUE71}
  188.       DBQuery2HTML('IBLocal','select * from customer', RecNo);
  189.     {$ELSE}
  190.       Table2HTML(Biolife, RecNo);
  191.     {$ENDIF}
  192.     except
  193.       on E: Exception do
  194.         writeln(E.ClassName,': ',E.Message)
  195.     end
  196.   finally
  197.     writeln('</body>');
  198.     writeln('</html>')
  199.   end
  200. end.
  201.